﻿using IQReportes.Models;
using IQReportes.Models.Logica;
using IQReportes.Utils;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Web;

namespace IQReportes.ViewModels
{
    /// <summary>
    /// Clase para manejar los datos básicos del usuario
    /// </summary>
    public class UsuarioBasicoViewModel
    {
        /// <summary>
        /// id
        /// </summary>
        public string id { get; set; }
        /// <summary>
        /// usuario
        /// </summary>
        [DisplayName("Usuario")]
        [RangoLongitud(5,15)]
        [Required]
        public string _usuario { get; set; }
        /// <summary>
        /// nombre del usuario
        /// </summary>
        [DisplayName("Nombre")]
        [Required]
        [MaxLength(50,ErrorMessage="El campo Nombre debe tener máximo 50 caracteres de longitud")]
        public string nombre { get; set; }

        /// <summary>
        /// email
        /// </summary>
        [DisplayName("Email")]
        [Email]
        [MaxLength(40, ErrorMessage = "El campo Email debe tener máximo 40 caracteres de longitud")]
        [Required]
        public string email { get; set; }
        /// <summary>
        /// clave
        /// </summary>
        [DisplayName("Clave")]
        [RangoLongitud(5, 10)]
        public string claveEdit { get; set; }
        /// <summary>
        /// repetir clave
        /// </summary>
        [DisplayName("Clave")]
        [RangoLongitud(5,10)]
        [Required]
        public string clave { get; set; }
        /// <summary>
        /// idPerfil seleccionado del combobox
        /// </summary>
        [DisplayName("Perfil")]
        [Required]
        public string idPerfil { get; set; }
        /// <summary>
        /// Nombre del perfil seleccionado
        /// </summary>
        public string nombrePerfil { get; set; }
        /// <summary>
        /// Boton de fecha seleccionado para transacciones
        /// </summary>
        public int txBotonDateSeleccion { get; set; }
        /// <summary>
        /// Institución seleccionada para transacciones
        /// </summary>
        public int txInstitucion { get; set; }
        /// <summary>
        /// Institución seleccionada para panel de control
        /// </summary>
        public int pcInstitucion { get; set; }

        public UsuarioBasicoViewModel() { }
        /// <summary>
        /// Constructor con parámetros
        /// </summary>
        /// <param name="u">usuario</param>
        public UsuarioBasicoViewModel(Usuario u) {
            this.id = u.idUsuario + "";
            this._usuario = u.vcUsuario;
            this.nombre = u.vcNombre;
            this.email = u.vcEmail;
            this.clave = u.vcClave;
            this.idPerfil = u.idPerfil+"";
            this.nombrePerfil = u.perfil.vcNombre;
            this.txInstitucion = u.inTxInstitucion;
            this.txBotonDateSeleccion = u.inTxBotonDateSeleccion;
            this.pcInstitucion = u.inPCInstitucion;
        }

        /// <summary>
        /// Convertir UsuarioBasicoViewModel a Usuario
        /// </summary>
        /// <returns></returns>
        public Usuario extract()
        {
            Usuario u = new Usuario();
            u.idUsuario = (this.id == null) ? -1 : Int32.Parse(this.id);
            u.vcUsuario = this._usuario;
            u.vcNombre = this.nombre;
            u.vcEmail = this.email;
            u.vcClave = this.clave;
            u.idPerfil = Int32.Parse(this.idPerfil);
            u.inTxInstitucion = this.txInstitucion;
            u.inTxBotonDateSeleccion = this.txBotonDateSeleccion;
            u.inPCInstitucion = this.pcInstitucion;
            return u;
        }

    }
}